/* 
 * AlaAgente.java
 * 
 * Data de criação: 06/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;

/**
 * Classe responsável por registrar o vinculo entre um {@link Agente} e uma
 * {@link Ala}. Neste vínculo são registradas as datas de inclusão e remoção
 * (quando ocorrer) e também observações pertinentes as operações anteriormente
 * citadas. O Agente somente poderá estar em uma ala cuja a data de remoção
 * esteja nula (Vínculo Corrente).
 * 
 * @author Osvaldeir
 * @since 06/09/2010
 * 
 */
@Entity
@Table(name = "RLALAAGENTE")
@SequenceGenerator(name = "SQALAAGENTE", sequenceName = "SQALAAGENTE")
public class AlaAgente extends BaseEntity<Integer> {

	private static final long serialVersionUID = 1L;

	private AlaUnidadeOperacional alaUnidadeOperacional;

	private Agente agente;

	private Date dataInclusao;

	private Date dataRemocao;

	private String observacao;

	@Id
	@Override
	@Column(name = "ALAAGENTEID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQALAAGENTE")
	public Integer getId() {
		return super.getId();
	}

	/**
	 * Retorna o(a) alaUnidadeOperacional.
	 * 
	 * @return AlaUnidadeOperacional
	 */
	@ManyToOne
	@JoinColumn(name = "UNIDADEOPERACIONALID", nullable = false)
	public AlaUnidadeOperacional getAlaUnidadeOperacional() {
		return alaUnidadeOperacional;
	}

	/**
	 * Atribui o(a) alaUnidadeOperacional.
	 * 
	 * @param alaUnidadeOperacional
	 *            AlaUnidadeOperacional
	 */
	public void setAlaUnidadeOperacional(
			AlaUnidadeOperacional alaUnidadeOperacional) {
		this.alaUnidadeOperacional = alaUnidadeOperacional;
	}

	/**
	 * Retorna o(a) agente.
	 * 
	 * @return Agente
	 */
	@ManyToOne
	@JoinColumn(name = "AGENTEID", nullable = false)
	public Agente getAgente() {
		return agente;
	}

	/**
	 * Atribui o(a) agente.
	 * 
	 * @param agente
	 *            Agente
	 */
	public void setAgente(Agente agente) {
		this.agente = agente;
	}

	/**
	 * Retorna o(a) dataInclusao.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAINCLUSAO", nullable = false)
	public Date getDataInclusao() {
		return dataInclusao;
	}

	/**
	 * Atribui o(a) dataInclusao.
	 * 
	 * @param dataInclusao
	 *            Date
	 */
	public void setDataInclusao(Date dataInclusao) {
		this.dataInclusao = dataInclusao;
	}

	/**
	 * Retorna o(a) observacao.
	 * 
	 * @return String
	 */
	@Column(name = "OBSERVACAO", nullable = true, length = 500)
	public String getObservacao() {
		return observacao;
	}

	/**
	 * Atribui o(a) observacao.
	 * 
	 * @param observacao
	 *            String
	 */
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	/**
	 * Retorna o(a) dataRemocao.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAREMOCAO", nullable = true)
	public Date getDataRemocao() {
		return dataRemocao;
	}

	/**
	 * Atribui o(a) dataRemocao.
	 * 
	 * @param dataRemocao
	 *            Date
	 */
	public void setDataRemocao(Date dataRemocao) {
		this.dataRemocao = dataRemocao;
	}

}
